package com.example.common.domain.Test;

import com.example.common.enums.DifficultyLevel;
import com.example.common.enums.QuestionType;
import jakarta.persistence.EnumType;
import jakarta.persistence.Enumerated;
import jakarta.persistence.Id;
import jakarta.persistence.Table;
import lombok.Data;

import java.util.List;
import java.util.Map;


@Data
@Table(name = "assessment_question")
//@Builder // 可选，如果需要Builder模式来创建对象
public class AssessmentQuestion {

    /**
     * 题目ID (例如，UUID 或数据库自增ID)
     */
    @Id
    private String id;

    /**
     * 题干内容
     */
    private String questionText;

    /**
     * 题目类型 (使用上面定义的 QuestionType 枚举)
     */
    @Enumerated(EnumType.STRING) // 关键注解，存储枚举的 value 字段
    private QuestionType type;

    /**
     * 选项 (主要用于选择题、匹配题等)
     * 对于选择题: Key可以是选项标签 (A, B, C), Value是选项内容。
     * 对于填空题: 可以不使用，或用List<String>表示多个空。
     * 对于匹配题: Key是待匹配项，Value是选项。
     */
    private Map<String, String> options;

    /**
     * 参考答案
     * 对于选择题: 可能是选项的Key (如 "A") 或选项内容。
     * 对于多选题: 可以是 List<String> (如 ["A", "C"])。
     * 对于填空题: 可以是 List<String>，每个元素对应一个空的答案。
     * 对于判断题: 可以是 "True" 或 "False" (或布尔值，但字符串更灵活)。
     * 对于简答/论述题: 是标准答案文本。
     */
    private List<String> correctAnswers; // 使用List以支持多答案（如多选题、多个填空）

    /**
     * 答案解析
     */
    private String explanation;

    /**
     * 题目难度级别 (使用上面定义的 DifficultyLevel 枚举)
     */
    @Enumerated(EnumType.STRING) // 关键注解，存储枚举的 value 字段
    private DifficultyLevel difficulty;

    /**
     * 知识点/关联章节 (可以与 CourseOutline 中的 teachingContent 的Key关联)
     */
    private List<String> knowledgePoints;

    /**
     * 题目分数
     */
    private Double score;

    /**
     * 备注或提示信息
     */
    private String remarks;

    /**
     * 题目相关的媒体资源URL (例如，图片、音频、视频链接)
     */
    private String mediaUrl;

    // 可以根据需要添加其他字段，例如：
    // private String author; // 出题人
    // private java.util.Date creationDate; // 创建日期
    // private List<String> tags; // 标签，用于搜索和分类
}
